package com.yf.zzmusic.controller;


import com.yf.zzmusic.common.Constants;
import com.yf.zzmusic.common.PageInfo;
import com.yf.zzmusic.common.Result;
import com.yf.zzmusic.pojo.dto.user.UserLoginDTO;
import com.yf.zzmusic.pojo.dto.user.UserPageDTO;
import com.yf.zzmusic.pojo.dto.user.UserTypeDTO;
import com.yf.zzmusic.pojo.dto.user.UserUpdateDTO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;

import com.yf.zzmusic.service.IUserService;
import com.yf.zzmusic.pojo.entity.User;

import org.springframework.web.bind.annotation.RestController;

import java.io.File;

/**
 * <p>
 * 用户表，用户分为普通用户，歌手与管理员 前端控制器
 * </p>
 *
 * @author
 * @since 2024-02-03
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private IUserService userService;

    @PostMapping("/insert")
    public Result save(@Validated @RequestBody User user) {
        //Validated表示使用验证
        //这里我们给user.setType设置一个固定值,保证每次用户新增都是普通用户
        user.setType(0);
        boolean result=userService.save(user);
        if (result){
            return Result.success("新增成功",null);
        }else{
            return Result.error("新增失败");
        }
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean result= userService.removeById(id);
        if (result){
            return Result.success("删除成功",null);
        }else{
            return Result.error(Constants.NO_CONTENT,"删除失败");
        }
    }

    @PostMapping("/update")
    public Result update(@Validated @RequestBody UserUpdateDTO userUpdateDTO){
        //updateUser为我们手动写的方法
        boolean result=userService.updateUser(userUpdateDTO);
        if (result){
            return Result.success("修改成功",null);
        }else{
            return Result.error("修改失败");
        }
    }

    @GetMapping("/{id}")
    public Result findOne(@PathVariable Integer id) {
        User user=userService.getById(id);
        if (user!=null){
            return Result.success("查询成功",user);
        }else{
            return Result.error(Constants.NO_CONTENT,"查询失败");
        }
    }

    @GetMapping("/page")
    public Result findPage(@Validated UserPageDTO userPageDTO) {
        PageInfo<User> pageInfo=userService.userByPage(userPageDTO);
        if (pageInfo.getTotal()>0) {
            return Result.success("查询成功",pageInfo);
        }else{
            return Result.error(Constants.NO_CONTENT,"列表为空");
        }
    }

    @PostMapping("/login")
    public Result login (@Validated @RequestBody UserLoginDTO userLoginDTO){
        return Result.success("登录成功", userService.login(userLoginDTO));
    }

    @PostMapping("/update/type")
    public Result updateType(@Validated @RequestBody UserTypeDTO userTypeDTO){
        boolean result=userService.updateTypeByUserId(userTypeDTO);
        if (result){
            return Result.success("修改类型成功");
        }else {
            return Result.success("修改类型失败");
        }
    }

    @GetMapping("/getEcharts")
    public Result generateEcharts(){
        File file = userService.generateEcharts();
        if (file!=null){
            return Result.success("成功");
        }else{
            return Result.error("失败");
        }
    }



}

